home *** CD-ROM | disk | FTP | other *** search
- include "prtequ.h"
-
- *
- * Howtek Pixelmaster color print driver
- *
- CR equ $d
- LF equ $a
- FF equ $c
- ESC equ $1b
- DC2 equ $12
-
- SECTION printer,CODE,PUBLIC
- ***************************************************************
- ***************************************************************
- ***************************************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "PRNT"
- dc.w 200
-
- *
- * distribute the calls the the appropriate routines
- *
- pxlmstr:
- move.l a0,table
- lsl.w #2,d0
- lea prntbl,a1
- move.l 0(a1,d0.w),a1
- jmp (a1)
-
- *
- * identify who I am, and set up who I like to speak to.
- *
- p_ident:
- move.l #driver,pdrvrnm(a0) ;pointer to string for driver name
- move.w #PARALLEL+ASCENDING,device(a0)
- prtok: moveq #1,d0
- rts
-
- *
- * initialize the table of printer specific routines
- *
- p_init: move.l #driver,pdrvrnm(a0) ;pointer to string for driver name
- clr.b pdl(a0) ;no page description language
- move.b #0,pmult(a0) ;automatically print mulitiple copies?
- move.b #0,pman(a0) ;handle manual feed?
- move.b #PRT_CMY,ptype(a0) ;printer type?
-
- move.l sendout(a0),send+2 ;self-modifing code, tisk, tisk!
-
-
- *
- * pminlft and pmaxw must be evenly divisible by 16
- * this is the part that should be worked out
- *
-
- move.w pdensity(a0),d0
- cmp.w #7,d0
- bcs pint1
- moveq #6,d0
- pint1: lsl.w #1,d0
-
- lea xdpi_tbl,a1
- move.w 0(a1,d0.w),pxdpi(a0) ;x resolution
- lea ydpi_tbl,a1
- move.w 0(a1,d0.w),pydpi(a0) ;y resolution
- lea minl_tbl,a1
- move.w 0(a1,d0.w),pminlft(a0) ;pixels from the left
- lea minr_tbl,a1
- move.w 0(a1,d0.w),pminrht(a0) ;pixels from the right
- lea mint_tbl,a1
- move.w 0(a1,d0.w),pmintop(a0) ;pixels down from top
- lea minb_tbl,a1
- move.w 0(a1,d0.w),pminbot(a0) ;pixels up from bottom
- lea xover_tbl,a1
- move.w 0(a1,d0.w),pxover(a0) ;percentage of x overlap of dots
- lea yover_tbl,a1
- move.w 0(a1,d0.w),pyover(a0) ;percentage of y overlap of dots
- lea rowht_tbl,a1
- move.w 0(a1,d0.w),prowht(a0) ;rows height modula
-
- lsl.w #1,d0
- lea grmode_tbl,a1
- move.l 0(a1,d0.w),grmode
- lea maxw_tbl,a1
- move.l 0(a1,d0.w),pmaxw(a0) ;maximum # pixels across
- lea maxh_tbl,a1
- move.l 0(a1,d0.w),pmaxh(a0) ;maximum # pixels down
- bra prtok
-
- *
- * going to begin printing a document
- *
- p_bgndoc:
- move.l grmode,a0
- bsr sendline
- lea bgnmode,a0
- bra sendline
- *
- * about to start printing of a page
- *
- p_bgnpage:
- bra prtok
-
- *
- * about to print a new tile for the page
- *
- p_bgntile:
- bra prtok
-
- *
- * print a block to the printer
- *
- p_block:
- move.l table,a0
- move.l pblockw(a0),d0
- move.w d0,width
- move.l pblockplane(a0),pplane
- move.l pblockptr(a0),a1
- move.l (a1),a1
- add.l pblockoff(a0),a1
- move.l a1,v_base
- *
- * RGB
- *
- move.l v_base,v_ptr ;Red
- bsr putline
-
- move.l v_base,v_ptr ;Green
- move.l pplane,d0
- add.l d0,v_ptr
- bsr putline
-
- move.l v_base,v_ptr ;Blue
- move.l pplane,d0
- lsl.l #1,d0
- add.l d0,v_ptr
- bsr putline
-
- lea endline,a0
- bra sendline
-
- putline:
- move.w width,d0
- move.l v_ptr,a0
- putln1: tst.b -1(a0,d0.w)
- bne putln2
- subq.w #1,d0
- bne putln1
- moveq #1,d0
- putln2: move.w d0,twidth
-
- lea bgnline,a0
- bsr sendline
- move.w twidth,d0
- bsr sendn
- move.b #"V",d0
- bsr send
- *
- move.w twidth,d1
- move.l v_ptr,a0
- putln3: move.b (a0)+,d0
- neg.b d0
- move.l a0,-(sp)
- move.w d1,-(sp)
- bsr send
- move.w (sp)+,d1
- move.l (sp)+,a0
- subq.w #1,d1
- bne putln3
- bra prtok
-
- *
- * just finished describing current tile
- *
- p_endtile:
- bra prtok
-
- *
- * just finished describing all tiles for this page
- *
- p_endpage:
- bra prtok
-
- *
- * finished printing the document
- *
- p_enddoc:
- lea endmode,a0
- bra sendline
-
- ***************************************************
- *** these are the send routines for the ***
- *** dot matrix driver. ***
- ***************************************************
- *
- sendline:
- move.b (a0)+,d0
- beq prtok
- move.l a0,-(sp)
- bsr send
- move.l (sp)+,a0
- bra sendline
- *
- *
- sendn: cmp.w #10,d0
- bcs sdn1
- and.l #$ffff,d0
- divu #10,d0
- swap d0
- move.w d0,-(sp)
- swap d0
- bsr sendn
- move.w (sp)+,d0
- sdn1: or.b #"0",d0
- *
- * bra send
- *
- *
- send: jmp $ffffff
- *
- *
- ***********************************
- *** ***
- ***********************************
- SECTION printer,DATA,PUBLIC
-
- prntbl: dc.l prtok,prtok,prtok,prtok,p_init
- dc.l p_bgndoc,p_bgnpage,p_bgntile
- dc.l p_block
- dc.l p_endtile,p_endpage,p_enddoc
- dc.l prtok,p_ident
-
-
- xdpi_tbl: dc.w 120,240,240,240,240,240,240
- ydpi_tbl: dc.w 120,240,240,240,240,240,240
- minl_tbl: dc.w 30,60,60,60,60,60,60
- minr_tbl: dc.w 30,60,60,60,60,60,60
- mint_tbl: dc.w 0,0,0,0,0,0,0
- minb_tbl: dc.w 0,0,0,0,0,0,0
- maxw_tbl: dc.l 960,1920,1920,1920,1920,1920,1920
- maxh_tbl: dc.l 0,0,0,0,0,0,0
- xover_tbl: dc.w 0,0,0,0,0,0,0
- yover_tbl: dc.w 0,0,0,0,0,0,0
- rowht_tbl: dc.w 1,1,1,1,1,1,1
- grmode_tbl: dc.l rez1,rez2,rez2,rez2,rez2,rez2,rez2
-
-
- driver: dc.b "Howtek Pixelmaster v2.0 beta",0
-
-
- rez1: dc.b ESC,"*t120W" ;120 DPI
- dc.b 0
-
- rez2: dc.b ESC,"*t240W" ;240 DPI
- dc.b 0
-
-
- bgnmode: dc.b ESC,"*r0A",0 ;graphics mode
- bgnline: dc.b ESC,"*b",0
- endline: dc.b ESC,"*b0W",0
- endmode: dc.b ESC,"*rB",0
-
- *
-
-
- SECTION printer,BSS,PUBLIC
- table: ds.l 1
- twidth: ds.w 1
- v_base: ds.l 1
- v_ptr: ds.l 1
- width: ds.w 1
- pplane: ds.l 1
- count: ds.w 1
- rows: ds.w 1
- rowht: ds.w 1
- grmode: ds.l 1
-